import 'dart:io';

import 'package:df/page/splash/update_app.dart';
import 'package:df/utils/logger_utils.dart';
import 'package:flutter_xupdate/flutter_xupdate.dart';

class UpdateUtils {
  static const String kPlatformAndroid = 'android';

  ///初始化
  static void initXUpdate() {
    if (Platform.isAndroid) {
      FlutterXUpdate.init(
        ///是否输出日志
          debug: true,
          ///是否使用post请求
          isPost: false,
          ///post请求是否是上传json
          isPostJson: false,
          ///请求响应超时时间
          timeout: 25000,
          ///是否开启仅Wifi网络下更新
          isWifiOnly: false,
          ///是否开启自动模式
          isAutoMode: false,
          ///需要设置的公共参数
          supportSilentInstall: false,
          ///在下载过程中，如果点击了取消的话，是否弹出切换下载方式的重试提示弹窗
          enableRetry: false)
          .then((value) {
        LogUtils.i('【更新】初始化成功: ${value}');
      })
          .catchError((error) {
        LogUtils.e('【更新】出错= ${error}');
      }
      );

      FlutterXUpdate.setUpdateHandler(
          onUpdateParse: (String? json) async {
            //这里是自定义json解析
            return customParseJson(json ?? '{}');
          },

          onUpdateError: (Map<String, dynamic>? message) async {
            LogUtils.d('【更新】${message}');
            //下载失败
            if (message!["code"] == 4000) {
              FlutterXUpdate.showRetryUpdateTipDialog(
                  retryContent: '更新失败，是否手动更新?',
                  retryUrl: 'https://www.pgyer.com/odsai');
            }
          }
      );
    } else {
      LogUtils.w('【更新】iOS仅支持AppStore更新');
    }
  }
  ///使用自定义json解析
  static void customJsonParse(String url) {
    // FlutterXUpdate.checkUpdate(url: url, isCustomParse: true);
    String _customJson = """
{
  "hasUpdate": true,
  "isIgnorable": true,
  "versionCode": 10,
  "versionName": "1.0.2",
  "updateLog": "\r\n1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。\n1、优化api接口。\n2、添加使用demo演示。\n3、新增自定义更新服务API接口。\n4、优化更新提示界面。",
  "apkUrl": "https://down.qq.com/qqweb/QQ_1/android_apk/Android_8.5.0.5025_537066738.apk",
  "apkSize": 4096
}
    """;
    FlutterXUpdate.updateByInfo(updateEntity: customParseJson(_customJson));
  }
  ///将自定义的json内容解析为UpdateEntity实体类
  static UpdateEntity customParseJson(String json) {
    UpdateEntity updateEntity = makeEntity(json);

    // if(updateEntity?.resultCode == 0) {
    if(updateEntity.versionCode! > 0) {
      return updateEntity;//apk的大小(KB)
    } else {
      return UpdateEntity(
          hasUpdate: false,//是否有新版本
          isIgnorable: true,//是否可忽略该版本
          versionCode: 0,//版本号
          versionName: '',//版本名称
          updateContent: '',//更新内容
          downloadUrl: '',//下载地址
          apkSize: 0);//apk的大小(KB)
    }
  }
  static UpdateEntity makeEntity(String json) {
    UpdateApp? appInfo =
    UpdateApp.fromJsonString(json);
    LogUtils.w('【更新】${appInfo}');
    LogUtils.w('【更新】${appInfo?.data}');
    LogUtils.w('【更新】${appInfo?.data.android}');
    LogUtils.w('【更新】${appInfo?.data.android.newVersionCode}');
    UpdateEntity updateEntity = UpdateEntity(
        hasUpdate: appInfo?.data.android.isUpdate, //是否有新版本
        isIgnorable: false, //是否可忽略该版本
        versionCode: appInfo?.data.android.newVersionCode, //版本号
        versionName: appInfo?.data.android.newVersionName, //版本名称
        updateContent: appInfo?.data.android.releaseNotes.zh, //更新内容
        downloadUrl: 'https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk', //下载地址
        apkSize: appInfo?.data.android.apkSize);

    return updateEntity;
  }





  static int _getColorFromHex(String hexColor) {
    hexColor = hexColor.replaceAll('#', '');
    if (hexColor.length == 6) {
      hexColor = 'FF' + hexColor;
    } else if (hexColor.length != 8) {
      hexColor = 'FFFFFFFF';
    }
    return int.parse(hexColor, radix: 16);
  }
}